Menguasai kualitas JavaScript melalui infrastruktur yang kuat. Pelajari cara menerapkan kerangka kerja untuk pengujian, linting, cakupan kode, dan integrasi berkelanjutan untuk kode yang andal dan dapat dipelihara.
Infrastruktur Kualitas JavaScript: Panduan Implementasi Kerangka Kerja
Dalam lanskap pengembangan perangkat lunak yang dinamis saat ini, kualitas kode JavaScript adalah yang terpenting. Infrastruktur kualitas yang kuat bukan lagi sebuah kemewahan melainkan sebuah keharusan untuk membangun aplikasi yang andal, dapat dipelihara, dan dapat diskalakan. Panduan ini memberikan gambaran komprehensif tentang cara mengimplementasikan infrastruktur kualitas JavaScript menggunakan kerangka kerja populer, memastikan kode Anda mematuhi praktik terbaik dan memberikan hasil yang luar biasa.
Mengapa Berinvestasi pada Infrastruktur Kualitas JavaScript?
Berinvestasi pada infrastruktur kualitas yang kuat menawarkan berbagai manfaat:
- Mengurangi Bug dan Kesalahan: Alat pengujian otomatis dan analisis statis membantu mengidentifikasi dan mencegah bug di awal siklus pengembangan.
- Keterpeliharaan Kode yang Ditingkatkan: Gaya pengkodean yang konsisten dan kode yang terstruktur dengan baik memudahkan pengembang untuk memahami dan memodifikasi kode.
- Peningkatan Kecepatan Pengembangan: Proses otomatis seperti pengujian dan linting membebaskan pengembang untuk fokus pada penulisan kode.
- Kolaborasi yang Ditingkatkan: Standar pengkodean bersama dan tinjauan kode otomatis mendorong kolaborasi dan konsistensi di seluruh tim.
- Mengurangi Utang Teknis: Mengatasi masalah kualitas kode sejak dini mencegah akumulasi utang teknis, membuat pengembangan di masa depan lebih mudah dan lebih murah.
- Pengalaman Pengguna yang Lebih Baik: Kode berkualitas tinggi menghasilkan aplikasi yang lebih stabil dan berkinerja, yang mengarah pada pengalaman pengguna yang lebih baik.
Komponen Utama Infrastruktur Kualitas JavaScript
Infrastruktur kualitas JavaScript yang komprehensif biasanya mencakup komponen-komponen berikut:- Linting: Menegakkan gaya pengkodean dan mengidentifikasi potensi kesalahan.
- Pemformatan Kode: Mengotomatiskan pemformatan kode untuk memastikan konsistensi.
- Pengujian: Memverifikasi fungsionalitas kode melalui pengujian otomatis.
- Cakupan Kode: Mengukur persentase kode yang dicakup oleh pengujian.
- Analisis Statis: Menganalisis kode untuk potensi kerentanan keamanan dan masalah kinerja.
- Integrasi Berkelanjutan (CI): Mengotomatiskan proses build, pengujian, dan deployment.
- Tinjauan Kode: Inspeksi manual kode oleh pengembang lain untuk mengidentifikasi potensi masalah.
Panduan Implementasi Kerangka Kerja
Bagian ini memberikan panduan terperinci tentang penerapan setiap komponen infrastruktur kualitas menggunakan kerangka kerja JavaScript yang populer.1. Linting dengan ESLint
ESLint adalah alat linting yang kuat yang menegakkan gaya pengkodean dan mengidentifikasi potensi kesalahan dalam kode JavaScript. Ini sangat dapat dikonfigurasi dan mendukung berbagai aturan.
Instalasi
Instal ESLint menggunakan npm atau yarn:
npm install eslint --save-dev
yarn add eslint --dev
Konfigurasi
Buat file konfigurasi ESLint (.eslintrc.js
, .eslintrc.yaml
, atau .eslintrc.json
) di root proyek Anda.
Contoh .eslintrc.js
:
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
},
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 'latest',
sourceType: 'module',
},
plugins: [
'react',
'@typescript-eslint',
],
rules: {
'indent': [
'error',
2,
],
'linebreak-style': [
'error',
'unix',
],
'quotes': [
'error',
'single',
],
'semi': [
'error',
'always',
],
'no-unused-vars': 'warn',
'no-console': 'warn',
'react/prop-types': 'off'
},
};
Konfigurasi ini memperluas aturan ESLint yang direkomendasikan, menambahkan dukungan untuk React dan TypeScript, dan mendefinisikan aturan kustom untuk indentasi, gaya jeda baris, tanda kutip, dan titik koma.
Penggunaan
Jalankan ESLint dari baris perintah:
npx eslint .
Anda juga dapat mengintegrasikan ESLint ke dalam IDE Anda untuk linting secara real-time.
2. Pemformatan Kode dengan Prettier
Prettier adalah pemformat kode yang beropini yang secara otomatis memformat kode untuk memastikan konsistensi. Ini terintegrasi dengan baik dengan ESLint dan alat lainnya.
Instalasi
Instal Prettier menggunakan npm atau yarn:
npm install prettier --save-dev
yarn add prettier --dev
Konfigurasi
Buat file konfigurasi Prettier (.prettierrc.js
, .prettierrc.yaml
, atau .prettierrc.json
) di root proyek Anda.
Contoh .prettierrc.js
:
module.exports = {
semi: true,
trailingComma: 'all',
singleQuote: true,
printWidth: 120,
tabWidth: 2,
};
Konfigurasi ini mendefinisikan aturan untuk titik koma, koma di akhir, tanda kutip tunggal, lebar cetak, dan lebar tab.
Integrasi dengan ESLint
Untuk mengintegrasikan Prettier dengan ESLint, instal paket-paket berikut:
npm install eslint-config-prettier eslint-plugin-prettier --save-dev
yarn add eslint-config-prettier eslint-plugin-prettier --dev
Perbarui file konfigurasi ESLint Anda untuk memperluas prettier/recommended
:
module.exports = {
// ...
extends: [
// ...
'prettier/recommended',
],
// ...
};
Penggunaan
Jalankan Prettier dari baris perintah:
npx prettier --write .
Anda juga dapat mengintegrasikan Prettier ke dalam IDE Anda untuk pemformatan kode otomatis saat disimpan.
3. Pengujian dengan Jest
Jest adalah kerangka kerja pengujian populer yang menyediakan semua yang Anda butuhkan untuk menulis dan menjalankan pengujian untuk kode JavaScript. Ini termasuk test runner, pustaka asersi, dan kemampuan mocking.
Instalasi
Instal Jest menggunakan npm atau yarn:
npm install jest --save-dev
yarn add jest --dev
Konfigurasi
Tambahkan skrip test
ke file package.json
Anda:
{
// ...
"scripts": {
"test": "jest"
}
// ...
}
Anda juga dapat membuat file konfigurasi Jest (jest.config.js
) untuk menyesuaikan perilaku Jest.
Menulis Tes
Buat file tes dengan ekstensi .test.js
atau .spec.js
. Gunakan fungsi describe
dan it
untuk mengatur tes Anda.
Contoh file tes:
// sum.test.js
const sum = require('./sum');
describe('sum', () => {
it('harus menjumlahkan dua angka dengan benar', () => {
expect(sum(1, 2)).toBe(3);
});
it('harus menangani angka negatif', () => {
expect(sum(-1, 2)).toBe(1);
});
});
Menjalankan Tes
Jalankan tes dari baris perintah:
npm test
yarn test
4. Cakupan Kode dengan Istanbul
Istanbul (sekarang dikenal sebagai NYC) adalah alat cakupan kode yang mengukur persentase kode yang dicakup oleh tes. Ini membantu Anda mengidentifikasi area kode Anda yang tidak diuji secara memadai.
Instalasi
Instal Istanbul menggunakan npm atau yarn:
npm install nyc --save-dev
yarn add nyc --dev
Konfigurasi
Perbarui skrip test
Anda di package.json
untuk menggunakan NYC:
{
// ...
"scripts": {
"test": "nyc jest"
}
// ...
}
Anda juga dapat membuat file konfigurasi NYC (.nycrc.json
) untuk menyesuaikan perilaku NYC.
Menjalankan Tes dengan Cakupan
Jalankan tes dengan cakupan dari baris perintah:
npm test
yarn test
NYC akan menghasilkan laporan cakupan di direktori coverage
.
5. Analisis Statis dengan SonarQube
SonarQube adalah platform untuk inspeksi berkelanjutan terhadap kualitas kode. Ini melakukan analisis statis untuk mengidentifikasi potensi kerentanan keamanan, code smell, dan masalah kualitas lainnya. SonarQube terintegrasi dengan berbagai alat CI/CD dan mendukung berbagai bahasa pemrograman.
Instalasi
Unduh dan instal SonarQube dari situs web resmi: https://www.sonarqube.org/
Konfigurasi
Instal SonarQube Scanner CLI:
# Contoh untuk macOS
brew install sonar-scanner
Konfigurasikan SonarQube Scanner untuk terhubung ke instance SonarQube Anda. Ini biasanya melibatkan pengaturan variabel lingkungan atau membuat file konfigurasi (sonar-project.properties
) di root proyek Anda.
Contoh sonar-project.properties
:
sonar.projectKey=your-project-key
sonar.projectName=Your Project Name
sonar.projectVersion=1.0
sonar.sources=.
sonar.javascript.lcov.reportPaths=coverage/lcov.info
sonar.sourceEncoding=UTF-8
Pastikan untuk menyesuaikan kunci proyek, nama, versi, dan jalur sumber dengan proyek Anda.
Penggunaan
Jalankan SonarQube Scanner dari baris perintah:
sonar-scanner
Ini akan menganalisis kode Anda dan mengunggah hasilnya ke instance SonarQube Anda.
6. Integrasi Berkelanjutan (CI) dengan GitHub Actions
Integrasi Berkelanjutan (CI) mengotomatiskan proses build, pengujian, dan deployment setiap kali kode didorong ke repositori. GitHub Actions adalah platform CI/CD yang terintegrasi ke dalam GitHub yang memungkinkan Anda mengotomatiskan alur kerja pengembangan perangkat lunak Anda.
Konfigurasi
Buat file alur kerja GitHub Actions di direktori .github/workflows
repositori Anda. File alur kerja adalah file YAML yang mendefinisikan langkah-langkah yang akan dieksekusi.
Contoh .github/workflows/main.yml
:
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x, 18.x]
steps
- uses: actions/checkout@v3
- name: Gunakan Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Instal dependensi
run: npm ci
- name: Lint
run: npm run lint
- name: Tes
run: npm run test
- name: Build
run: npm run build # Ganti dengan perintah build Anda, jika ada
- name: Pemindaian SonarQube
if: ${{ always() }}
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
npm install -g sonar-scanner
sonar-scanner \
-Dsonar.projectKey=your-project-key \
-Dsonar.projectName="Your Project Name" \
-Dsonar.projectVersion=1.0 \
-Dsonar.sources=. \
-Dsonar.javascript.lcov.reportPaths=coverage/lcov.info \
-Dsonar.sourceEncoding=UTF-8 \
-Dsonar.login=$SONAR_TOKEN \
-Dsonar.github.sha=$GITHUB_SHA \
-Dsonar.github.repository=$GITHUB_REPOSITORY
Alur kerja ini mendefinisikan pipeline CI yang berjalan pada setiap push ke cabang main
dan setiap pull request yang menargetkan cabang main
. Ini menginstal dependensi, menjalankan linting, menjalankan tes, melakukan build (jika berlaku), dan menganalisis kode dengan SonarQube. Penting: Ganti `your-project-key` dan `Your Project Name` dengan nilai yang sesuai, dan definisikan rahasia `SONAR_TOKEN` di pengaturan repositori GitHub Anda.
Penggunaan
Commit dan push file alur kerja ke repositori Anda. GitHub Actions akan secara otomatis menjalankan alur kerja setiap kali kode didorong atau pull request dibuat.
Praktik Terbaik untuk Mengimplementasikan Infrastruktur Kualitas
- Mulai dari yang Kecil: Mulailah dengan mengimplementasikan satu atau dua komponen infrastruktur kualitas dan secara bertahap tambahkan lebih banyak seiring waktu.
- Otomatiskan Segalanya: Otomatiskan sebanyak mungkin proses, termasuk pengujian, linting, dan pemformatan kode.
- Integrasikan dengan CI/CD: Integrasikan infrastruktur kualitas ke dalam pipeline CI/CD Anda untuk memastikan bahwa kode diuji dan dianalisis secara otomatis sebelum deployment.
- Tetapkan Standar Pengkodean: Definisikan standar pengkodean yang jelas dan tegakkan menggunakan alat linting dan pemformatan kode.
- Tinjau Kode Secara Teratur: Lakukan tinjauan kode secara teratur untuk mengidentifikasi potensi masalah dan memastikan bahwa kode mematuhi standar pengkodean.
- Pantau Kualitas Kode: Gunakan alat seperti SonarQube untuk memantau kualitas kode dari waktu ke waktu dan mengidentifikasi area untuk perbaikan.
- Berikan Pelatihan: Berikan pelatihan kepada pengembang tentang infrastruktur kualitas dan praktik terbaik untuk menulis kode berkualitas tinggi.
- Budaya Kualitas: Kembangkan budaya kualitas dalam tim pengembangan Anda dengan menekankan pentingnya kualitas kode dan menyediakan alat serta sumber daya yang dibutuhkan pengembang untuk menulis kode berkualitas tinggi.
Pertimbangan Lanjutan
- TypeScript: Jika Anda menggunakan TypeScript, manfaatkan kemampuan pengetikan statisnya untuk menangkap kesalahan di awal siklus pengembangan. Konfigurasikan ESLint dan Prettier agar bekerja mulus dengan TypeScript.
- Monorepos: Saat bekerja dengan monorepo (misalnya, menggunakan alat seperti Lerna atau Nx), sesuaikan konfigurasi dan pipeline CI/CD Anda untuk menangani beberapa proyek dalam repositori yang sama.
- Aturan Kustom: Pertimbangkan untuk membuat aturan ESLint kustom atau plugin Prettier untuk menegakkan standar pengkodean spesifik proyek.
- Pemindaian Keamanan: Integrasikan alat pemindaian keamanan ke dalam pipeline CI/CD Anda untuk mengidentifikasi potensi kerentanan keamanan.
- Pemantauan Kinerja: Implementasikan alat pemantauan kinerja untuk melacak kinerja aplikasi Anda di produksi.
Kesimpulan
Mengimplementasikan infrastruktur kualitas JavaScript yang kuat sangat penting untuk membangun aplikasi yang andal, dapat dipelihara, dan dapat diskalakan. Dengan memanfaatkan kerangka kerja dan praktik terbaik yang diuraikan dalam panduan ini, Anda dapat secara signifikan meningkatkan kualitas kode Anda dan memberikan hasil yang luar biasa. Ingatlah bahwa membangun infrastruktur kualitas yang kuat adalah proses berkelanjutan yang membutuhkan usaha dan perbaikan terus-menerus. Rangkul budaya kualitas dalam tim pengembangan Anda dan berdayakan pengembang Anda dengan alat dan pengetahuan yang mereka butuhkan untuk menulis kode berkualitas tinggi.
Panduan ini dirancang untuk audiens global, terlepas dari lokasi geografis atau latar belakang budaya mereka. JavaScript adalah bahasa universal, dan prinsip-prinsip kualitas kode berlaku untuk proyek apa pun, di mana pun di dunia. Contoh yang diberikan dimaksudkan untuk bersifat umum dan dapat disesuaikan dengan lingkungan pengembangan dan alur kerja yang berbeda. Selalu pertimbangkan kebutuhan spesifik proyek dan tim Anda saat mengimplementasikan infrastruktur kualitas.
Selain itu, selalu pastikan Anda mematuhi peraturan privasi data (seperti GDPR, CCPA, dll.) terutama saat mengintegrasikan alat dan layanan pihak ketiga ke dalam infrastruktur Anda.